Modem.Doc file Updated September 4, 1989 for version 3.03 Contents: Introduction List of Included Drivers DIP settings for DataLink 1200/2400 How to Install a live driver Cable/Modem Specs for GS.Driver Cable/Modem Specs and DIP settings for SSC.Driver Cable/Modem Specs for IIc.Driver Using the IIc driver when the SSC.Driver doesn't work The Modem.Init file Introduction This file documents modem requirements and driver selection. Although Warp Six is written in Applesoft BASIC, the input/output drivers are written in 6502 assembly language. To use Warp Six, you have to install three files in the "/W6/WARP6" directory: 1) The Warp6.Loader program 2) The appropriate driver, renamed to be "Warp6.Driver" 3) The Modem.Init text file, containing initialization command for your modem The Warp6.Loader and Warp6.Driver programs that come installed in the /W6/WARP6 directory are modem-disabled versions -- the are copies of Local.Loader & Local.Driver found on side 2 of the distribution diskette or in the supplementary file, 'W6BBS2.BXY'. Rather than write five or six different modem drivers, there is only one for each interface, and they are set for a default speed of 2400 baud. If you have a 1200 or 300 baud modem, you must modify this line in LOGON: 36 POKE BA+49,3:REM 3=2400 baud, 2=1200 baud, 1=300 baud. WARNING: Be certain you use the fastest speed your modem is capable of. List of Included Drivers: GS.DRIVER - use this with an Apple IIgs (in fast mode) with any Hayes or compatible external modem. If you have a DataLink 2400, use the SSC.Driver and if you have a DataLink 1200, use the DataLink 1200 driver. Note that the SCC.Driver is designed to run on a 1.02Mhz machine; if you use it on the GS in fast mode, you'll need to modify some timeout values with POKEs. (See Warp6.Doc) SSC.DRIVER - use this with an Apple Super Serial Card (or equivalent), with any Hayes compatible external modem. (See DIP settings below) IIC.DRIVER - use this with the IIc (not IIc Plus) with any Hayes compatible external modem. DATALINK.1200 - this is an UNTESTED driver for the Applied Engineering Datalink 1200 modem card. DataLink 2400 users should use the SSC.DRIVER (not the DataLink 1200 driver) with the DataLink 2400 jumpers set to B-D only. ** Do me a favour: whether this works, or doesn't work, let me know. -- JF DIP Swith Settings for DataLink modems: Set your DataLink 2400 (and 1200) DIP switches like so: SW1-C Interrupts on SW2- For 2400: Open - carrier follows remote modem. For 1200:try Open SW3- For 1200: Open - carrier follows remote modem. For 2400:try Open SW4-C (the rest of the switches affect baud rate and parity, but Warp Six SW5-C does not use firmware, so they MAY be irrelevant.) SW6-C SW7-C SW8-C How to Install a Live Driver: To install a live modem driver, replace the file /W6/WARP6/WARP6.DRIVER with the driver that fits your modem, and replace the /W6/WARP6/WARP6.LOADER file with the WARP6.LOADER file included in W6BBS2.BXY (or on side two of the distribution diskette). The files you are replacing are actually copies of the Local.Loader and Local.Driver, which are used to experiment with the system without attaching a modem. Be sure to rename your driver as "WARP6.DRIVER", or the program will generate a "Path not Found" error. Note: I recommend you use Warp Six with an Apple II that is an enhanced IIe or higher. However, the drivers will function on a 64k II Plus. Warp Six drivers have been tested at 300, 1200 and 2400 baud. GS.Driver Interface Cable Specifications and modem requirements In order for the GS serial port driver to work, you need a custom modem cable. The modem specs are the same as for the SSC.Driver, which follows. For Hayes external modems and compatibles, use the following: Mini-DIN-8 (GS) to DB-25 (Modem) 1 DTR ----------------- 20 DTR 2 HSKi ---------------- 8 DCD (This is the important line) 3 TXD ----------------- 2 TXD 4 & 8 GND&RXD+ --------- 7 SGND Signal Ground 5 RXD ----------------- 3 RXD For the Apple Data Modem 2400: 1 DTR ----------------- 1 DTR 2 HSKi ---------------- x DCD (not sure which pin this is; check the manual) 3 TXD ----------------- 3 TXD 4 GND ----------------- 4 GND 5 RXD- ---------------- 5 RXD- 6 TXD+ ---------------- 6 TXD+ 8 RXD+ ---------------- 8 RXD+ The GS Control Panel Settings for the Modem Port should be as follows: All defaults except, buffering-yes, dcd handshake-no, dsr/dtr handshake-no, xon/xoff handshake-yes. To install the driver, copy it to the /W6/WARP6 directory and rename it as "WARP6.DRIVER". Very important: use the LOCAL.LOADER program (renamed as WARP6.LOADER) this GS.Driver. The Warp6.Loader supplied in W6BBS2.BXY is for interrupt- driven drivers only. The GS.Driver uses firmware to handle interrupts. SSC.Driver Interface Cable Specifications and modem requirements The SSC.Driver requires a custom serial cable. If you have a standard cable, you can make a few changes so that it conforms to the specs below: Here is the exact configuration, using a standard DB-25 male-male cable. SSC (DB-25) TO MODEM (DB-25) Hayes and compatible 1 GND --------------- 1 GND Frame ground (this line is OPTIONAL.) 2 TXD --------------- 2 TXD transmit data (from SSC to modem) 3 RXD --------------- 3 RXD receive data (from modem to SSC) 6 DSR --------------- 8 DCD data carrier detect (from remote modem) 7 SGND -------------- 7 SGND signal ground (for all signals but pin 1) 20 DTR --------------- 20 DTR data terminal ready (from SSC to modem) Make sure that NOTHING is connected to pin 8 on the SSC end. If necessary, cut the line from that end to ensure nothing is connected. (DSR means data set ready. The SSC.Driver uses this input line to monitor remote carrier status, ie. whether a remote caller is online or not.) The jumper block on the Super Serial Card should be set to the MODEM position. If your jumper block is not labelled, try it as it is. If it doesn't work, flip it around. Note that which end plugs into which device is important, because of the way the DCD pin from the modem is connected to the DSR pin on the SSC. Super Serial Card DIP switch settings: Switch 1 Switch 2 1 2 3 4 5 6 7 1 2 3 4 5 6 7 d u u u u u u u u u u u u d (d means down, u means up) Note: the only critical switch is SW2-6 which must be on to enable interrupts. If you want to set the switches differently to support another application, you can. Warp Six does not use SSC firmware. By the way: if you are using an unenhanced IIe, you should probaby get it enhanced. The older ROMS can lose characters at high baud rates, and this will be quite annoying to your users. The system was designed and tested on genuine Hayes products and I have nothing but praise for them. I have, however, had horrendous experiences with so-called "100% Hayes compatible" modems. The Applied Engineering DataLink 2400 is a notable exception. If you have a Hayes compatible modem, it must meet the following requirements to work with the SSC.Driver and/or GS.Driver: The modem must support disabling auto-answer with the ATS0=0 command, and must support manual answer with the ATA command. (Note: the Apple Modem 300/1200 can't do this.) 1) It must hangup and return to command state when DTR is dropped. (This rules out the Apple Personal Modem, by the way). DTR is set via DIP switches or by modem commands, like AT&D2. 2) It must supply a carrier detect signal that follows that of the remote modem. (If DCD is forced TRUE always, the system has no way of knowing when someone has hung up.) These are absolute requirements. Set up your modem beforehand to meet these requirements, using the following as a guide: Hayes & Exact compatible Hayes 2400 Effect Set switch 1 UP Issue AT&D2&W Support DTR Set switch 6 UP Issue AT&C1&W Follow remote DCD Set switch 5 DOWN Issue ATS0=0&W Disable auto-answer The BBS will set the modem up to provide digit result codes, no echo of result codes, and extended result codes with the ATX1 command (unless you are using the 300 baud driver, which doesn't include the X1 command.) You can probably let the system do these without pre-configuration. (Again, I have tested everything on genuine Hayes modems.) Note to DataLink owners: The Hayes.2400 driver will work with the DataLink 2400 modem, provided your dip and jumper settings are correct. (See above). The 1200 baud DataLink will need the dip settings shown, but doesn't have the jumpers to simulate a custom cable. I have included a driver to overcome this difficulty, but it has NOT BEEN TESTED. Please contact me if it fails to function. (My address/electronic address is in the Read.Me.First file) IIc Cable Specifications and Modem Requirements The IIc modem driver uses a different method to handle incoming calls because of the way the IIc modem port was designed. Warp Six with a Super Serial Card uses the DSR general purpose input line to monitor the status of remote carrier detect. On the IIc, this line is used for keyboard buffering, so I had to resort to using the DCD input. The DCD line is held low when there is no remote carrier. On the 6551, this disables the receiver, so Warp Six cannot see any result codes from the modem, and therefore cannot even be sure any modem is connected, nor what baud rate an incoming call is at. To overcome these problems, I set the modem to auto-answer, and constantly monitor the carrier detect line for a connection. When a connection occurs, the IIc driver displays "Incoming call..." and tries to determine the baud rate, by looking for a carriage return from the remote caller. The driver waits 1/4 second at each baud rate, cycling through each baud rate until either a carriage return is found, or the connection is lost. In testing with a IIc and Hayes Smartmodem 2400, we found it took one CR to establish the baud rate at 2400, 2 at 1200 and 3 at 300. The IIc driver for Warp Six requires a custom serial cable. Here is the exact configuration: IIC DIN-5 MALE TO MODEM DB-25 MALE 1 RTS --------------- 20 DTR data terminal ready (used to hangup modem) 2 TXD --------------- 2 TXD transmit data (from IIc to modem) 3 GND --------------- 7 GND signal ground 4 RXD --------------- 3 RXD receive date 5 DCD --------------- 8 DCD data carrier detect (from remote modem) IIC DIN-5 MALE TO MODEM MINI-DIN-8 MALE (Apple Data Modem 2400) 1 RTS --------------- 1 HSKo Handshake Out 2 TXD --------------- 3 TXD- Transmit Data negative 3 GND --------------- 4 & 8 GND & RXD+ Signal Ground and Receive Data Positive 4 RXD --------------- 5 RXD- Receive Data negative 5 DCD --------------- 7 DCD Data Carrier Detect **** **** Check your modem pinouts to ensure this line is DCD, not DSR. Note: The Apple Personal Modem will work with the above cable, but it can only provide carrier detect that is TRUE at all times, so the software will think someone is online at all times. As well, the APM does not hangup when DTR is dropped. This is unacceptable for running any kind of BBS. IIC DIN-5 MALE TO MODEM DB-9 (Apple Modem 300/1200) 1 RTS --------------- 6 DTR 2 TXD --------------- 9 TXD 3 GND --------------- 3 GND 4 RXD --------------- 5 RXD 5 DCD --------------- 7 DCD Note: The Apple Modem 300/1200 will work if you set your DIP switches like so: 1 - OFF 2 - OFF 3 - OFF These cables will work with most terminal programs as long as you remember that you can't receive data until a remote carrier is established (or until your modem is set up to force carrier detect TRUE at all times). For Warp Six, your modem must be configured to provide an accurate carrier detect signal. Cable for Modems that Don't work with SSC.Driver: For Apple Modem 300/1200 users: because this modem was not designed 100% Hayes compatible, you have to use the IIc driver with the following cable: (Note this will only work with a IIc or Super Serial Card.) SSC (DB-25) TO MODEM (DB-9) Apple Modem 300/1200 1 GND --------------- 8 GND Chassis ground (this line is OPTIONAL) 2 TXD --------------- 9 TXD 3 RXD --------------- 5 RXD 7 SGND -------------- 3 SGND 8 DCD --------------- 7 DCD 20 DTR --------------- 6 DTR If you have a modem with a DB-25 connector that doesn't support manual answer with the ATA command, or simply doesn't work with the SSC.Driver, try the IIc.Driver with the following cable: 1 GND --------------- 1 GND Frame Ground. This line is OPTIONAL. 2 TXD --------------- 2 TXD 3 RXD --------------- 3 RXD 7 SGND -------------- 7 SGND 8 DCD --------------- 8 DCD 20 DTR --------------- 20 DTR Modem Requirements and Setup for the IIc.Driver Your modem must meet three requirements: 1) It must hangup and return to command state when DTR is dropped. DTR is set via DIP switches or by modem commands, like AT&D2&W. 2) It must supply a carrier detect signal that follows that of the remote modem. (If DCD is forced TRUE always, the driver will believe a caller is always online.) 3) It must support auto-answer, either by DIP switch or the ATS0=1 command. These are absolute requirements. Set up your modem beforehand to meet these requirements, using the following as a guide: Hayes & Exact compatible Hayes 2400 or compat. Effect Set switch 1 UP Issue AT&D2&W Support DTR Set switch 6 UP Issue AT&C1&W Follow remote DCD Set switch 5 UP Issue ATS0=1&W Enable auto-answer The Modem.Init file should be set up as follows: ATS0=1S7=25 Just this one line terminated by a carriage return is all that is required. You can add an M0 command to shut off the modem speaker (if it has one). Just add "M0" to the end of the command. Note: the IIc.Driver will NOT work with the default Modem.Init file. I have included a file called IIc.Init for your convenience. It contains the above line. Just delete the Modem.Init file from the /W6/WARP6 directory, copy the IIc.Init file there, and rename it to be MODEM.INIT. If you have any problems, questions or suggestions regarding the IIc driver, please let me know. (See ReadMe First file for my electronic ID's). The Modem.Init file This file contains the initialization commands for your modem. It comes set up for the SCC.Driver and/or GS.Driver and Hayes Smartmodem 2400: ATX1E0V0M0S0=0S7=20 AT&C1&D2 The second line should be deleted if your modem does not support ampersand (&) commands. The first line should be customized if any of its commands are not implemented (or implemented differently) on your modem. What follows is a description of each command, what it does and why: AT - prefaces each command. This is the "ATtention" code. X1 - sets modem to provide extended result codes to indicate the baud rate of the connection. E0 - tells modem not to echo command characters V0 - use non-verbal (numeric) result codes. The driver can't recognize verbal result codes M0 - shut off the speaker. If your BBS is in your living room or bedroom, you don't want to hear the squeal of every connection. If you modem does not have a speaker, remove this command. If you WANT to hear each connection, change this command to M1. S0=0 This command sets register 0 to 0, which tells the modem never to answer the phone unless manually commanded by the software to do so with the ATA command, which is issued by the SSC.Driver after a '2' (Ring) result. This prevents the modem from answering when the software isn't ready. S7=20 This command sets register 7 to 20, which is the number of seconds to wait for a carrier. 20 seconds is plenty of time for most modems to make the connection; longer wastes time between false calls. You can set this to 15, 25 or 30 if you prefer. Feel free to experiment. &C1 Tells the Hayes 2400 or equivalent to provide a carrier detect signal based on that of the remote modem. This allows the driver to react when a user hangs up on the system. &D2 Tells the Hayes 2400 or equivalent to hangup and go to command state when the DTR (Data Terminal Ready) line is negated. This is how the SCC.Driver hangs up the modem. Warp Six does not support modems that won't hangup when DTR is dropped. Note: the carriage return at the end of each of the lines is important. After the driver sends a line, it pauses for about a second to allow the command to take effect. Then the next line, if any is sent.